public class Solution {
    //多数元素
    public int majorityElement(int[] nums) {
        int n = nums.length;
        int num = nums[0];
        int count = 1;
        for(int i = 1; i < n; i++) {
            if(count == 0) {
                num = nums[i];
            }
            if(num == nums[i]) {
                count++;
            }else{
                count--;
            }
        }
        return num;
    }
    //跳跃游戏
    public boolean canJump(int[] nums) {
        int n = nums.length;
        boolean[] dp = new boolean[n];
        dp[0] = true;
        for(int i = 1; i < n; i++) {
            for(int j = i-1; j >= 0; j--) {
                if(dp[j] && nums[j] >= (i-j)) {
                    dp[i] = true;
                }
            }
        }
        return dp[n-1];
    }
    //跳跃游戏II
    public int jump(int[] nums) {
        int n = nums.length;
        int[] dp = new int[n];
        dp[0] = 0;
        //dp[i]表示跳到i位置时的最小长度
        for(int i = 1; i < n; i++) {
            for(int j = 0; j < i; j++) {
                //找到第一个能够直接跳跃的位置
                if(nums[j] >= (i-j)) {
                    //最小跳跃步数加一
                    dp[i] = dp[j] +1;
                    break;
                }
            }
        }
        return dp[n-1];
    }
}
